package src.E_Thread;

/*
  线程的生命周期：
    从操作系统层面上线程状态有5种：初始状态、可运行状态、运行状态、休眠状态、终止状态
    从javaAPI层面上线程状态有6种：初始(NEW)、运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)
*/

// 线程停止，这里用1，3方法演示
//1、使用退出标识，使线程正常退出，也就是当 run() 方法完成后线程终止。
//2、使用stop()方法强行终止线程，但是不推荐使用这个方法，因为stop()和suspend()及resume()一样，都是作废过期的方法，使用它们可能产生不可预料的结果。
//3、使用 interrupt() 方法中断线程。
public class E08_ThreadStop implements Runnable{
    private boolean flag = true;
    @Override
    public void run() {
        int a = 0;
        while (flag){
            System.out.println(a++);
        }
    }

    public void stop(){
        this.flag = false;
    }

    public static void main(String[] args) throws InterruptedException {
        E08_ThreadStop e08_thradStop = new E08_ThreadStop();
        Thread thread = new Thread(e08_thradStop);
        thread.start();
        Thread.sleep(1000); // 延时一下不然看不出效果
        for (int i = 0; i < 1000; i++) {
            if (i == 100){
                e08_thradStop.stop(); // 使用标识终止线程
                //thread.interrupt(); // 使用.interrupt()方法终止线程，但是被打断的线程会继续运行，但是该线程的打断标记会更新，更新为true
                System.out.println("线程停止！");
            }
        }
    }
}
